package TOP_Version1;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Scanner;

public class Top_StudentUpdate {
	static Top_StudentVO sv = new Top_StudentVO();
	static Top_JDBC_SQL topsql = new Top_JDBC_SQL();
	static StringBuilder sb = new StringBuilder();
	static Scanner sc = new Scanner(System.in);
	static Connection conn = null;
	static PreparedStatement pstmt = null;
	static ResultSet rs = null;
	static String add = null;
	static String addv = null;
	static boolean a = false;
	static boolean b = true;
	static String logId = Top_LoginMain.logIdVO;
	
	protected static void updateStudent() {
		while ( b ) {
			System.out.print("수정하실 학생 번호를 입력하세요 : ");
			add = sc.next();
			try {
				conn = Top_JDBC_Connection.openDataBase();
				pstmt = conn.prepareStatement(topsql.StudentSelectAll1SQL);
				pstmt.setString( 1, add );
				rs = pstmt.executeQuery();
				if ( rs.next() ) {
					do {
						sv.setStd_tr(rs.getString(1));
						sv.setStd_no(rs.getString(2));
						sv.setStd_pw(rs.getString(3));
						sv.setStd_name(rs.getString(4));
						sv.setStd_tel(rs.getString(5));
						sv.setStd_addr(rs.getString(6));
						sv.setDept_no(rs.getString(7));
						sv.setTot_point(rs.getString(8));
						sv.setReg_date(rs.getString(9));
					} while ( rs.next() );
					b = false; break;
				} else { System.out.println("존재하지 않는 학생 번호입니다. 다시 확인해주세요"); }
			} catch ( Exception e ) {
				e.printStackTrace();
			} finally {
				Top_JDBC_Connection.closeDataBase(conn, pstmt, rs);
			}
		}
		b = true;
		while ( b ) {
			System.out.print("학생 비밀번호를 변경하시겠습니까? [ Y / N ] : ");
			switch ( sc.next() ) {
			case "Y" : case "y" :
				while ( b ) {
					System.out.print("수정하시려는 정보의 비밀번호를 입력하세요 : ");
					addv = sc.next();
					try {
						conn = Top_JDBC_Connection.openDataBase();
						pstmt = conn.prepareStatement(topsql.StudentSelectAll1SQL);
						pstmt.setString( 1, add );
						rs = pstmt.executeQuery();
						if ( rs.next() ) {
							if ( addv.equals( rs.getString(3))) {
								while ( b ) {
									System.out.print("변경하실 비밀번호를 입력하세요 : ");
									sv.setStd_pw( sc.next() );
									if ( sv.getStd_pw().equals(add) ) {
										System.out.println("아이디와 동일한 비밀번호는 사용하실 수 없습니다. 다시 입력해주세요");
									} else { b = false; break; }
								}
							} else { System.out.println("비밀번호를 잘못 입력하셨습니다. 다시 확인해주세요"); }
						} else { }
					} catch ( Exception e ) {
						e.printStackTrace();
					}
				}
			case "N" : case "n" :
				b = false; break;
			default : 
				System.out.println("잘못 입력하셨습니다. 다시 입력해주세요");
			}
		}
		b = true;
		while ( b ) {
			System.out.print("학생 이름을 변경하시겠습니까? [ Y / N ] : ");
			switch ( sc.next() ) {
			case "Y" : case "y" :
				System.out.print("변경하실 학생 이름을 입력하세요 : ");
				sv.setStd_name( sc.next() );
				b = false; break;
			case "N" : case "n" :
				b = false; break;
			default :
				System.out.println("잘못 입력하셨습니다. 다시 입력해주세요");
			}
		}
		b = true;
		while ( b ) {
			System.out.print("학생 연락처를 변경하시겠습니까? [ Y / N ] : ");
			switch ( sc.next() ) {
			case "Y" : case "y" :
				System.out.print("변경하실 학생 연락처를 입력하세요 : ");
				sv.setStd_tel( sc.next() );
				b = false; break;
			case "N" : case "n" :
				b = false; break;
			default :
				System.out.println("잘못 입력하셨습니다. 다시 입력해주세요");
			}
		}
		b = true;
		sc = new Scanner(System.in);
		while ( b ) {
			System.out.print("학생 주소를 변경하시겠습니까? [ Y / N ] : ");
			switch ( sc.next() ) {
			case "Y" : case "y" :
				System.out.print("변경하실 학생 주소를 입력하세요 : ");
				sv.setStd_addr( sc.nextLine() );
				b = false; break;
			case "N" : case "n" :
				b = false; break;
			default :
				System.out.println("잘못 입력하셨습니다. 다시 입력해주세요");
			}
		}
		System.out.println( sv.toString() );
		b = true;
		while ( b ) {
			System.out.print("저장하시겠습니까? [ Y / N ] : ");
			switch ( sc.next() ) {
			case "Y" : case "y" :
				try {
					conn = Top_JDBC_Connection.openDataBase();
					pstmt = conn.prepareStatement(topsql.StudentUpdateSQL);
					pstmt.setString( 1, sv.getStd_pw() );
					pstmt.setString( 2, sv.getStd_name() );
					pstmt.setString( 3, sv.getStd_tel() );
					pstmt.setString( 4, sv.getStd_addr() );
					pstmt.setString( 5, sv.getDept_no() );
					pstmt.executeUpdate();
					System.out.println("저장되었습니다.");
				} catch ( Exception e ) {
					e.printStackTrace();
				} finally {
					Top_JDBC_Connection.closeDataBase(conn, pstmt, rs);
				}
				b = false; break;
			case "N" : case "n" :
				System.out.println("작업이 취소되었습니다.");
				System.out.println("학생 관련 업무 화면으로 이동합니다.");
				Top_StudentMain.Top_StudentAdminScreen();
				b = false; break;
			default :
				System.out.println("잘못 입력하셨습니다. 다시 입력해주세요");
			}
		}
		b = true;
		while ( b ) {
			System.out.print("다른 학생의 정보를 수정하시겠습니까? [ Y / N ] : ");
			switch ( sc.next() ) {
			case "Y" : case "y" :
				System.out.println("학생 정보를 추가 수정합니다.");
				sb = new StringBuilder();
				updateStudent();
				b = false; break;
			case "N" : case "n" :
				System.out.println("학생 관련 업무 화면으로 이동합니다.");
				Top_StudentMain.Top_StudentAdminScreen();
				b = false; break;
			default :
				System.out.println("잘못 입력하셨습니다. 다시 입력해주세요");
			}
		}
	}
	
	protected static void updateSubStudent() {
		try {
			conn = Top_JDBC_Connection.openDataBase();
			pstmt = conn.prepareStatement(topsql.StudentSelectAll1SQL);
			pstmt.setString( 1, logId );
			rs = pstmt.executeQuery();
			while ( rs.next() ) {
				sv.setStd_tr(rs.getString(1));
				sv.setStd_no(rs.getString(2));
				sv.setStd_pw(rs.getString(3));
				sv.setStd_name(rs.getString(4));
				sv.setStd_tel(rs.getString(5));
				sv.setStd_addr(rs.getString(6));
				sv.setDept_no(rs.getString(7));
				sv.setTot_point(rs.getString(8));
				sv.setReg_date(rs.getString(9));
			} 
		} catch ( Exception e ) {
			e.printStackTrace();
		} finally {
			Top_JDBC_Connection.closeDataBase(conn, pstmt, rs);
		}
		while ( b ) {
			System.out.print("학생 비밀번호를 변경하시겠습니까? [ Y / N ] : ");
			switch ( sc.next() ) {
			case "Y" : case "y" :
				while ( b ) {
					System.out.print("수정하시려는 정보의 비밀번호를 입력하세요 : ");
					addv = sc.next();
					try {
						conn = Top_JDBC_Connection.openDataBase();
						pstmt = conn.prepareStatement(topsql.StudentSelectAll1SQL);
						pstmt.setString( 1, logId );
						rs = pstmt.executeQuery();
						if ( rs.next() ) {
							if ( addv.equals( rs.getString(3))) {
								while ( b ) {
									System.out.print("변경하실 비밀번호를 입력하세요 : ");
									sv.setStd_pw( sc.next() );
									if ( sv.getStd_pw().equals(logId) ) {
										System.out.println("아이디와 동일한 비밀번호는 사용하실 수 없습니다. 다시 입력해주세요");
									} else { b = false; break; }
								}
							} else { System.out.println("비밀번호를 잘못 입력하셨습니다. 다시 확인해주세요"); }
						} else { }
					} catch ( Exception e ) {
						e.printStackTrace();
					}
				}
			case "N" : case "n" :
				b = false; break;
			default : 
				System.out.println("잘못 입력하셨습니다. 다시 입력해주세요");
			}
		}
		b = true;
		while ( b ) {
			System.out.print("학생 이름을 변경하시겠습니까? [ Y / N ] : ");
			switch ( sc.next() ) {
			case "Y" : case "y" :
				System.out.print("변경하실 학생 이름을 입력하세요 : ");
				sv.setStd_name( sc.next() );
				b = false; break;
			case "N" : case "n" :
				b = false; break;
			default :
				System.out.println("잘못 입력하셨습니다. 다시 입력해주세요");
			}
		}
		b = true;
		while ( b ) {
			System.out.print("학생 연락처를 변경하시겠습니까? [ Y / N ] : ");
			switch ( sc.next() ) {
			case "Y" : case "y" :
				System.out.print("변경하실 학생 연락처를 입력하세요 : ");
				sv.setStd_tel( sc.next() );
				b = false; break;
			case "N" : case "n" :
				b = false; break;
			default :
				System.out.println("잘못 입력하셨습니다. 다시 입력해주세요");
			}
		}
		b = true;
		sc = new Scanner(System.in);
		while ( b ) {
			System.out.print("학생 주소를 변경하시겠습니까? [ Y / N ] : ");
			switch ( sc.next() ) {
			case "Y" : case "y" :
				System.out.print("변경하실 학생 주소를 입력하세요 : ");
				sv.setStd_addr( sc.nextLine() );
				b = false; break;
			case "N" : case "n" :
				b = false; break;
			default :
				System.out.println("잘못 입력하셨습니다. 다시 입력해주세요");
			}
		}
		b = true;
		while ( b ) {
			System.out.print("저장하시겠습니까? [ Y / N ] : ");
			switch ( sc.next() ) {
			case "Y" : case "y" :
				try {
					conn = Top_JDBC_Connection.openDataBase();
					pstmt = conn.prepareStatement(topsql.StudentUpdateSQL);
					pstmt.setString( 1, sv.getStd_pw() );
					pstmt.setString( 2, sv.getStd_name() );
					pstmt.setString( 3, sv.getStd_tel() );
					pstmt.setString( 4, sv.getStd_addr() );
					pstmt.executeUpdate();
					System.out.println("저장되었습니다.");
					System.out.println("초기 화면으로 이동합니다.");
					Top_StudentMain.Top_StudentAdminScreen();
				} catch ( Exception e ) {
					e.printStackTrace();
				} finally {
					Top_JDBC_Connection.closeDataBase(conn, pstmt, rs);
				}
				b = false; break;
			case "N" : case "n" :
				System.out.println("작업이 취소되었습니다.");
				System.out.println("초기 화면으로 이동합니다.");
				Top_StudentMain.Top_StudentAdminScreen();
				b = false; break;
			default :
				System.out.println("잘못 입력하셨습니다. 다시 입력해주세요");
			}
		}
	}
}